<?php
class Modelo_base extends DataMapper {

    function __construct($id = NULL) {
        parent::__construct($id);
    }

    public function toString()
    {
        return strval(id);
    }

    // Valida el CUIT según el tipo de documento
    function _cuitValido($field)
    {
        $cuit = $this->{$field};

        if(!empty($cuit)) {
            $id_tipo_doc = $this->afip_tipodoc_id;
            $tipo_doc = new Afip_documento($id_tipo_doc);
            if ($tipo_doc->codigo == '80' || $tipo_doc->codigo == '86')
            {
                if (strlen($cuit) > 10) {
                    $digito_verificador = $cuit[10];
                    $factor = 5;
                    $suma = 0;
                    for ($indice = 0; $indice < 10; $indice++) { 
                        $suma += ($cuit[$indice] * $factor);
                        $factor -= 1;
                        if($factor == 1) $factor = 7;
                    }

                    $resto = $suma % 11;
                    $digito_obtenido = 11 - $resto;
                    if ($digito_obtenido == 11) $digito_obtenido = 0;
                    if ($digito_obtenido == 10) $digito_obtenido = 9;

                    if($digito_obtenido == $digito_verificador) return TRUE;
                    else return FALSE;
                }
                else return FALSE;
            }
            else return TRUE;
        }
        else return TRUE;
    }

    // Prepara las fechas para almacenarlas en la BD o para utilizarlas en el sistema, invirtiendo el orden de los componentes
    function _prepararFecha($field, $formatoFecha)
    {
        $fecha = $this->{$field};

        $fecha = strtotime($fecha);
        $fecha = ($fecha != FALSE) ? date($formatoFecha, $fecha) : '';
        if($fecha == '00/00/0000' || $fecha == '0000/00/00' ||
           $fecha == '00-00-0000' || $fecha == '0000-00-00') $fecha = '';

        if($fecha != "")
        {
            $date = DateTime::createFromFormat($formatoFecha, $fecha);
            $fecha = $date->format($formatoFecha);
        }

        $this->{$field} = $fecha;
    }

    function _encrypt($field, $key) {
        $string = $this->{$field};
        $this->{$field} = $this->encriptar($string, $key);
    }

    protected function encriptar($string, $key){
        $result = '';
        for($i=0; $i<strlen($string); $i++) {
            $char = substr($string, $i, 1);
            $keychar = substr($key, ($i % strlen($key))-1, 1);
            $char = chr(ord($char)+ord($keychar));
            $result.= $char . chr(ord($char)+ord($char));
        }

        return base64_encode($result);   
    }
}